﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace NP.BPMReportPlatform.Utilities
{
    public static class RegexHelper
    {
        // 校验中国大陆手机号码
        public static bool IsValidPhoneNumber(string phoneNumber)
        {
            string pattern = @"^1[3-9]\d{9}$";
            return Regex.IsMatch(phoneNumber, pattern);
        }

        // 校验电子邮件地址
        public static bool IsValidEmail(string email)
        {
            string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
            return Regex.IsMatch(email, pattern);
        }

        // 校验中国大陆身份证号码（18位）
        public static bool IsValidIDCard(string idCard)
        {
            string pattern = @"^\d{17}(\d|X|x)$";
            return Regex.IsMatch(idCard, pattern);
        }

        // 校验日期（格式: YYYY-MM-DD）
        public static bool IsValidDate(string date)
        {
            string pattern = @"^\d{4}-\d{2}-\d{2}$";
            return Regex.IsMatch(date, pattern);
        }

        // 校验URL
        public static bool IsValidUrl(string url)
        {
            string pattern = @"^(https?|ftp):\/\/([a-zA-Z0-9.-]+)(:[0-9]+)?(\/[^\s]*)?$";
            return Regex.IsMatch(url, pattern);
        }

        // 校验IPv4地址
        public static bool IsValidIPv4(string ip)
        {
            string pattern = @"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
            return Regex.IsMatch(ip, pattern);
        }

        // 校验银行卡号
        public static bool IsValidBankCard(string cardNumber)
        {
            string pattern = @"^(\d{16}|\d{19})$";
            return Regex.IsMatch(cardNumber, pattern);
        }

        // 校验正整数
        public static bool IsPositiveInteger(string input)
        {
            string pattern = @"^\d+$";
            return Regex.IsMatch(input, pattern);
        }

        // 校验带小数的数字（整数或浮点数）
        public static bool IsValidDecimalNumber(string input)
        {
            string pattern = @"^\d+(\.\d+)?$";
            return Regex.IsMatch(input, pattern);
        }

        // 校验信用卡号（以Visa为例，16位数字）
        public static bool IsValidCreditCard(string cardNumber)
        {
            string pattern = @"^4[0-9]{12}(?:[0-9]{3})?$";  // Visa卡
            return Regex.IsMatch(cardNumber, pattern);
        }

        // 校验用户名（4-20位，字母、数字、下划线）
        public static bool IsValidUsername(string username)
        {
            string pattern = @"^[a-zA-Z0-9_]{4,20}$";
            return Regex.IsMatch(username, pattern);
        }

        public static bool MatchSuccess(string value, string pattern)
        {
            return Regex.IsMatch(value, pattern);
        }
    }
}
